package com.zrwl.poscloud.xo.utils;
//
//import com.zrwl.poscloud.base.constants.Constants;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.http.*;
//import org.springframework.stereotype.Component;
//import org.springframework.util.LinkedMultiValueMap;
//import org.springframework.util.MultiValueMap;
//import org.springframework.web.client.RestTemplate;
//import org.springframework.web.util.UriComponentsBuilder;
//
//import javax.annotation.PostConstruct;
//import java.util.Map;
//import java.util.regex.Pattern;
//
//@Slf4j
//@Component
//public class RestTemplateUtil {
//
//    private static final Pattern QUERY_PARAM_PATTREN = Pattern.compile("([^&=]+)(=?)([^&]+)?");
//
//    public static final String GET = "GET";
//    public static final String POST = "POST";
//    public static final String PUT = "PUT";
//    public static final String DELETE = "DELETE";
//
//    @Autowired
//    private RestTemplate restTemplate;
//
//    private static RestTemplateUtil restTemplateUtil;
//
//
//    @PostConstruct
//    public void init() {
//        restTemplateUtil = this;
//        restTemplateUtil.restTemplate = this.restTemplate;
//    }
//
//    public static ResponseEntity<String> post(String url, Map<String, Object> params) {
//        ResponseEntity<String> entity = restTemplateUtil.restTemplate.postForEntity(url, params, String.class);
//        return entity;
//    }
//
//    public static <T> T get(String url, Map<String, Object> params, Class<T> responseType) {
//        return restTemplateUtil.restTemplate.getForEntity(url, responseType, params).getBody();
//    }
//
//    public static <T> ResponseEntity<T> doRequest(String reqType, String url, String contentType, Map<String, String> headerMap, String argType, Map<String, Object> params, Class<T> responseType) {
//        log.info("doRequest reqType:"+reqType);
//        HttpHeaders hders = new HttpHeaders();
//        if(StringUtils.isNotEmpty(contentType)) {
//            hders.setContentType(MediaType.valueOf(contentType));
//        }
//        for(Map.Entry<String,String> entry : headerMap.entrySet()) {
//            hders.add(entry.getKey(), entry.getValue());
//        }
//
//        //有些post的form请求，在URI和BODY中同时有参数
//        Map<String,Object> uriValueMap = null;
//        if(params.containsKey(Constants.ArgKey_URIParamMap)){
//            uriValueMap = (Map<String, Object>) params.get(Constants.ArgKey_URIParamMap);
//            params.remove(Constants.ArgKey_URIParamMap);
//        }
//
//        MultiValueMap<String, Object> multiValueMap = new LinkedMultiValueMap<>();
//        for(Map.Entry<String,Object> entry : params.entrySet()) {
//            multiValueMap.add(entry.getKey(), entry.getValue());
//        }
//
//        HttpEntity<?> requestEntity = (MediaType.APPLICATION_JSON_VALUE.equals(contentType) || MediaType.APPLICATION_JSON_UTF8_VALUE.equals(contentType))?
//                new HttpEntity<MultiValueMap>(multiValueMap, hders) : (MediaType.APPLICATION_FORM_URLENCODED_VALUE.equals(contentType) ?
//                new HttpEntity<MultiValueMap>(createMultiValueMap(params), hders) : new HttpEntity<>(null, hders));
//        if(uriValueMap != null && !uriValueMap.isEmpty()){
//            UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url).queryParams(createMultiValueMap(uriValueMap));
//            url = builder.build().encode().toUriString();
//        } else if(Constants.ArgType_URL.equals(argType)) {//参数在url的?后
//            UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url).queryParams(createMultiValueMap(params));
//            url = builder.build().encode().toUriString();
//        }
//        ResponseEntity<T> responseEntity = null;
//        if(reqType.equals(GET)) {
//            responseEntity = restTemplateUtil.restTemplate.exchange(url, HttpMethod.GET, requestEntity, responseType);
//        }
//        if(reqType.equals(POST)) {
//            responseEntity = restTemplateUtil.restTemplate.postForEntity(url, requestEntity, responseType);
//        }
//
//        return responseEntity;
//    }
//
//    private static MultiValueMap<String, String> createMultiValueMap(Map<String, Object> params) {
//        MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>();
//        if(params != null) {
//            for(Map.Entry<String,Object> entry : params.entrySet()) {
//                multiValueMap.add(entry.getKey(), entry.getValue().toString());
//            }
//        }
//
//        return multiValueMap;
//    }
//}
